#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
更新选择题的选项
"""

from app import create_app
from models import db, Problem
import json

def update_choice_problems():
    """更新选择题的选项"""
    app = create_app()
    
    with app.app_context():
        # 获取所有选择题
        choice_problems = Problem.query.filter_by(type='choice').all()
        
        if not choice_problems:
            print("没有找到选择题")
            return
        
        # 更新选项数据
        options_data = {
            'Python生成器': {
                'description': '在Python中，以下哪个关键字用于创建生成器？',
                'answer': 'A',
                'options': ['yield', 'return', 'generator', 'create']
            },
            'Python上下文管理器': {
                'description': '在Python中，以下哪个关键字用于上下文管理？',
                'answer': 'B',
                'options': ['with', 'context', 'manage', 'enter']
            },
            'Python多线程': {
                'description': '在Python中，以下哪个模块用于多线程编程？',
                'answer': 'A',
                'options': ['threading', 'multiprocessing', 'concurrent', 'parallel']
            },
            'Python装饰器': {
                'description': '在Python中，装饰器使用以下哪个符号？',
                'answer': 'C',
                'options': ['@', '#', '@', '$']
            },
            'Python列表推导式': {
                'description': '以下哪个是Python列表推导式的正确语法？',
                'answer': 'B',
                'options': ['[x for x in range(10)]', '[x for x in range(10)]', 'list(x for x in range(10))', 'for x in range(10): x']
            },
            'Python异常处理': {
                'description': '在Python中，以下哪个关键字用于捕获所有异常？',
                'answer': 'A',
                'options': ['except:', 'catch:', 'error:', 'try:']
            },
            'Python文件操作': {
                'description': '在Python中，以下哪个模式用于以只读方式打开文件？',
                'answer': 'A',
                'options': ['r', 'w', 'a', 'x']
            }
        }
        
        updated_count = 0
        for problem in choice_problems:
            if problem.title in options_data:
                data = options_data[problem.title]
                problem.description = data['description']
                problem.answer = data['answer']
                problem.options = json.dumps(data['options'])
                updated_count += 1
                print(f"更新题目: {problem.title}")
        
        try:
            db.session.commit()
            print(f"成功更新 {updated_count} 个选择题")
        except Exception as e:
            db.session.rollback()
            print(f"更新题目失败: {e}")

if __name__ == '__main__':
    update_choice_problems()
